package thefirst.controller;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import thefirst.LessonBoard.model.LessonBoardVO;
import thefirst.addresscode.model.AddressCodeService;
import thefirst.code.model.CodeVO;
import thefirst.member.model.MemberSearchVO;
import thefirst.member.model.MemberService;
import thefirst.member.model.MemberVO;
import thefirst.member.model.MyHelpVO;
import thefirst.member.model.StudentListVO;
import thefirst.member.model.StudentVO;
import thefirst.member.model.TeacherListVO;
import thefirst.member.model.TeacherVO;
import thefirst.mypage.model.SelectedListService;
import thefirst.support.model.HelpService;

@Controller
public class MemberController  {
	private String path="C:\\java-kosta\\workspace\\project-thefirst\\whereismyteacher-c\\WebContent\\upload\\";
	@Resource(name="memberServiceImpl")
	private MemberService memberService;
	private AddressCodeService addressCodeService;
	@Resource(name="helpServiceImpl")
	private HelpService helpService;
	@Resource(name="selectedListServiceImpl")
	private SelectedListService selectedListService;
	
///////////////////////////   경덕   ///////////////////////////////////////

	/**
	 * registerStudentStart.do : header.jsp의 경로에서 넘어옴 
	 * tiles 에서 학생 회원가입 view를 보여주는 페이지
	 * @return
	 * @throws SQLException
	 */
		@RequestMapping("/registerStudentStart.do")		
		private String registerStudentStart() throws SQLException {
			System.out.println("registerStudentStart"); 
			return "student.member";
		}
		/**
		 *  casting : teacher와 student에서 student로 분류, student_Register.jsp에서 넘어오는 페이지
		 * @param svo
		 * @return
		 * @throws Exception
		 */
		@RequestMapping("/castingStudent.do")
		private String castingStudent(StudentVO svo) throws Exception {
			System.out.println("castingStudent"+svo);
			// registerMember를 호출
			registerMember(svo);
			System.out.println("castingStudent");
			// studentRegister_result.jsp 경로
			return "student.result";
		}
		/**
		 * registerTeacherStart.do : header.jsp의 경로에서 넘어옴 
		 * tiles 에서 선생님 회원가입 view를 보여주는 페이지
		 * @return
		 * @throws SQLException
		 */
		@RequestMapping("/registerTeacherStart.do")
		private String registerTeacherStart() throws SQLException {
			System.out.println("registerTeacherStart");
			return "teacher.member";
		}
		/**
		 * casting : teacher와 student에서 teacher로 분류, teacher_Register.jsp에서 넘어오는 페이지
		 * @param tvo
		 * @return
		 * @throws Exception
		 */
		@RequestMapping("/castingTeacher.do")
		private String castingTeacher(TeacherVO tvo) throws Exception {
			System.out.println("controller 준비");
			this.fileUpload(tvo);
			System.out.println("castingTeacher");
			registerMember(tvo);
			// teacherRegister_result.jsp 경로
			return "teacher.result";
		}
		
		private void fileUpload(TeacherVO tvo) throws Exception{
			MultipartFile mFile=tvo.getUploadfile();
			//파일의 유무 확인
			if(mFile!=null&&mFile.isEmpty()==false){
				tvo.setOriginalfilename(mFile.getOriginalFilename());//파일 이름을 orgFileName에 세팅
				String uploadName=System.currentTimeMillis()+"_"+tvo.getOriginalfilename();
				tvo.setSavefilename(uploadName);//저장된 파일 이름을 세팅 (시간+orgFileName)
				File copyFile=new File(path+uploadName);//path위치에 파일 생성
				mFile.transferTo(copyFile);//이동
			}
		}
		
		/**
		 * casting 메서드에서 호출해주는 메서드
		 * @param mvo
		 * @throws Exception
		 */
		private void registerMember(MemberVO mvo) throws Exception{	
			System.out.println(mvo+"1");
			memberService.registerMember(mvo);
			System.out.println(mvo+"2");
		}
		/**
		 * 중복확인하는 메서드
		 * @param mvo
		 * @return
		 * @throws SQLException
		 */
		@RequestMapping("/isExistId.do")
		@ResponseBody
		public int isExistId(MemberVO mvo) throws SQLException{			
			System.out.println(mvo+"controller");
			int result=memberService.isExistId(mvo);
			System.out.println(result+": test2");
			return result;
		}

	//////////////////////////////////////////////////////////////////
	
	////////////////////////////문규//////////////////////////////////
		/**
		 * 마이페이지에 진입하는 메서드
		 * @return
		 */
		@RequestMapping("/mypage.do")
		public String mypage() {
			return "main/mypage.mypage";
		}
	/**
	 * profile
	 * 개인 정보를 가져오는 메서드 ..
	 * 마이페이지 서비스에서 사용을 한다.
	 * return profile.profile.mypage
	 * -> mypage\profile\profile_main.jsp
	 * @param request
	 * @param mvo
	 * @return
	 * @throws SQLException
	 */
	
		@RequestMapping("/profileTeacher.do")
		public String profileTeacher(HttpServletRequest request,MemberVO mvo) throws SQLException{
			MemberVO  rmvo =null;
			System.out.println(mvo);
			 if(mvo.getId()!=null){
				if(!mvo.getId().equals("")){
					rmvo=memberService.showMember(mvo);
				}
			 }
			
			//결과로 전송하는 회원 정보를 출력
			System.out.println("MemberController profile"+rmvo);
			//조회결과를 requestScope에 저장!
			request.setAttribute("mvo", rmvo);
			return "profile/profileTeacher.mypage";
		}
		@RequestMapping("/profileStudent.do")
		public String profileStudent(HttpServletRequest request,MemberVO mvo) throws SQLException{
			MemberVO  rmvo =null;
			System.out.println(mvo);
			 if(mvo.getId()!=null){
				if(!mvo.getId().equals("")){
					rmvo=memberService.showMember(mvo);
				}
			 }
			
			//결과로 전송하는 회원 정보를 출력
			System.out.println("MemberController profile"+rmvo);
			//조회결과를 requestScope에 저장!
			request.setAttribute("mvo", rmvo);
			return "profile/profileStudent.mypage";
		}
	
	/**
	 * moveConfirmPass
	 * 비밀번호 확인하는 페이지로 이동하는 메서드
	 * @return
	 * @throws SQLException
	 */
	@RequestMapping("/moveConfirmPass.do")
	public String moveConfirmPass() throws SQLException{
		return "withdrawal/confrimPass.mypage";
	}
	
	/**
	 * confirmPass
	 * ajax를 통해서 비밀번호를 체크하는 메서드
	 * @param mvo
	 * @param session
	 * @param path
	 * @return
	 */
	@RequestMapping("/confirmPass.do")
	@ResponseBody
	public boolean confirmPass(MemberVO mvo,HttpSession session,String path){
		boolean message =false;
		MemberVO rmvo =null;
		try {
			rmvo = memberService.login(mvo);
			
			// id와 password가 같은 회원이 있다면 true값을 넘겨준다.
			if(rmvo!=null){
				System.out.println("confirmPass complete");
				message=true;
			}			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return message;
	}
	
	/**
	 * moveWithdrawal
	 * 회원 탈퇴 버튼을 누르는 페이지로 이동하는 메서드
	 * @return
	 * @throws SQLException
	 */
	@RequestMapping("/moveWithdrawal.do")
	public String moveWithdrawal() throws SQLException{
		return "withdrawal/withdrawal.mypage";
	}
	
	/**
	 * withdrawalMember
	 * 회원 탈퇴를 담당하는 메서드
	 * 회원의 정보에 탈퇴일자를 기록하여 탈퇴여부를 결정한다.
	 * @return
	 * @throws SQLException
	 */
	@RequestMapping("/withdrawalMember.do")
	public String withdrawalMember(HttpSession session,MemberVO mvo) throws SQLException{
		
		memberService.withdrawalMember(mvo);
		System.out.println("withdrawalMember");
		logout(session);
		System.out.println("withdrawalMember - logout");
		return "home";
	}
	/**
	 * updateMember
	 * 개인 정보를 수정하는 메서드 
	 * ver-1. 이름만 수정하는 메서드
	 * ver-2. 성별 수정기능 추가
	 */
	@RequestMapping("/updateMember.do")
	@ResponseBody
	public MemberVO updateMember(HttpServletRequest request,MemberVO mvo) throws SQLException{
		System.out.println("updateMember"+mvo);
		MemberVO  rmvo=memberService.updateMember(mvo);
		//결과로 전송하는 회원 정보를 출력
		System.out.println("MemberController updateMember"+rmvo);
		//조회결과를 requestScope에 저장!
		//request.setAttribute("mvo", rmvo);
		return rmvo;
	}
	
	/**
	 * updateTeacher, updateStudent, updatePicture
	 *  선생님과 학생이 구별되는 변수들을 수정한다.
	 */
	@RequestMapping("/updateTeacher.do")
	@ResponseBody
	public MemberVO updateTeacher(HttpServletRequest request,TeacherVO tvo) throws SQLException{
		System.out.println("updateTeacher"+tvo);
		MemberVO  rmvo=memberService.updateTeacher(tvo);
		//결과로 전송하는 회원 정보를 출력
		System.out.println("MemberController updatTeacher"+rmvo);
		//조회결과를 requestScope에 저장!
		//request.setAttribute("mvo", rmvo);
		return rmvo;
	}
	
	@RequestMapping("/updatePicture.do")
	@ResponseBody
	public MemberVO updatePicture(TeacherVO tvo) throws Exception{
		System.out.println("updatePicture"+tvo);
		this.fileUpload(tvo);
		MemberVO  rmvo=memberService.updateTeacher(tvo);
		//결과로 전송하는 회원 정보를 출력
		System.out.println("MemberController updatePicture"+rmvo);
		//조회결과를 requestScope에 저장!
		//request.setAttribute("mvo", rmvo);
		return rmvo;
	}
	
	@RequestMapping("/updateStudent.do")
	@ResponseBody
	public MemberVO updateStudent(HttpServletRequest request,StudentVO svo) throws SQLException{
		System.out.println("updateStudent"+svo);
		MemberVO  rmvo=memberService.updateStudent(svo);
		//결과로 전송하는 회원 정보를 출력
		System.out.println("MemberController updatStudent"+rmvo);
		//조회결과를 requestScope에 저장!
		//request.setAttribute("mvo", rmvo);
		return rmvo;
	}
	
	@RequestMapping("/detailViewTeacher.do")
	@ResponseBody
	public MemberVO detailViewTeacher(HttpServletRequest request,MemberVO mvo) throws SQLException{
		MemberVO  rmvo =null;
		System.out.println(mvo);
		 if(mvo.getId()!=null){
			if(!mvo.getId().equals("")){
				rmvo=memberService.showMember(mvo);
			}
		 }
		
		//결과로 전송하는 회원 정보를 출력
		System.out.println("MemberController profile"+rmvo);
		return rmvo;
	}
////////////////////////////////최정훈 시작~~~//////////////////////////////////////////////////////
////////////////////////////////로그인,로그아웃, 나의 문의내역////////////////////////////////////////////		


	/**
	 * 로그인 메서드 입니다.
	 * login_result에서 session을 체크해서
	 * session이 있을 경우 넘어 온다.
	 * 어느 시점에서 로그인을 시도하는지 알기 위해 
	 * path값으로 로그인 다음화면 경로를 저장한다.
	 * 
	 * redirect 방식으로 넘기면 viewResolver를 거치지 않으므로 
	 * 올바른 주소로 전송할 수 있다. (*.do)
	 * @param mvo
	 * @param request
	 * @param session
	 * @param path
	 * @return
	 * @throws Exception 
	 */
	@RequestMapping("/login.do")
	public ModelAndView login(MemberVO mvo, HttpServletRequest request,
			HttpSession session,String path) throws Exception {
			//회원의 정보를 lmvo에 담아 lmvo가 null이 아니면 session에 담는다.
			MemberVO rmvo = memberService.login(mvo);
			if (rmvo != null) {
				session.setAttribute("mvo", rmvo);
				System.out.println("===================================");
				System.out.println("찜한 정보 리스트 반환하기");
				List list =this.getSelectedList(rmvo);
				session.setAttribute("selectedList", list);
				
			}else if(rmvo==null){
				System.out.println("null 이어야?");
			//lmvo가 null이면 로그인 페이지로 넘어 간다.
				return new ModelAndView("redirect:loginResult.do","path",path);
			}
			
		return new ModelAndView("redirect:"+path, "mvo", rmvo);
	}
	
	/**
	 * 로그인한 멤버가 찜한 정보의 리스트를 반환한다.
	 * @param mvo
	 * @return
	 * @throws Exception
	 */
	private List getSelectedList(MemberVO mvo) throws Exception{
		List list = null;
		if(mvo.getMembertype().equals("t")){
			list=selectedListService.getSelectedList(mvo.getId(), "t");
		}else if(mvo.getMembertype().equals("s")){
			list=selectedListService.getSelectedList(mvo.getId(), "s");
		}
		return list;
	}
	
	/**
	 * 로그아웃 메서드
	 * session이 null이 아니면 session를 종료시킨다.
	 * @param session
	 * @return
	 */
	@RequestMapping("/logout.do")
	public ModelAndView logout(HttpSession session) {
		if (session != null) {
			session.invalidate();
		}
		return new ModelAndView("redirect://main.do");
	}
	
	/**
	 * loginResult
	 * 로그인 체크과정이 없이 메인 페이지가 로그인폼으로 이루어져있는 페이지로 이동
	 * @param mvo
	 * @param session
	 * @return
	 */
	@RequestMapping("/loginResult.do")
	public ModelAndView loginResult(MemberVO mvo,HttpSession session,String path){
		/*if(path.contains(".do")){
			String tmp = path.replace(".do", "");
			String tmp2 = path.replace("/", "");
			System.out.println(tmp2);
			
		}*/
		return new ModelAndView("member/loginResult.loginResult","path",path);
	}
	/**
	 * 나의 문의 내역 보여준다
	 * 로그인한 아이디와 글쓴아이디를 비교하여 가져온다. 관리자의 덧글도 같이 가져온다
	 * @param myHelpVO
	 * @return
	 * @throws SQLException
	 */
	@RequestMapping("/myHelp.do")
	public ModelAndView getHelpList(MyHelpVO myHelpVO) throws SQLException{
		return new ModelAndView("myHelp/myHelp.myhelp","myhelpList",memberService.myHelpList(myHelpVO));
	}
	
///////////////////////////////최정훈 끝~///////////////////////////////////////////////////////
	
	
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////정운선 시작//////////////////////////////////////////////	
/**
 * 학생찾기 첫페이지 보여주기
 * @param request
 * @param response
 * @return
 * @throws SQLException
 */
	@RequestMapping("/studentListBasic.do")
	public ModelAndView getStudentListBasic(HttpServletRequest request, HttpServletResponse response) throws SQLException{
		return new ModelAndView("student/basiclist.search");//tab 으로 변경하여 수정
	}

	/**
	 * 선생님찾기 첫페이지 보여주기
	 * @param request
	 * @param response
	 * @return
	 * @throws SQLException
	 */
	@RequestMapping("/teacherListBasic.do")
	public ModelAndView getTeacherListBasic(HttpServletRequest request, HttpServletResponse response) throws SQLException{
		return new ModelAndView("teacher/basiclist.search");//tab 으로 변경하여 수정
	}	
	/**
	 * 학생찾기 첫페이지 보여주기에서 셀렉트박스에 뿌려줄 희망과목리스트 가져오기
	 * 틀린예:리턴값을 ModelAndView로 넘기면 새로운 map을 생성해서 listVo를 저장한다.
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/hopeSubjectList.do")
	@ResponseBody
	public HashMap hopeSubjectList(HttpServletRequest request, HttpServletResponse response) throws Exception{
		List<CodeVO> listvoOfSido=memberService.sidoList();
		List<CodeVO> listVoOfHopesubject=memberService.hopeSubjectList();	//과외희망과목 : hopesubject
		List<CodeVO> listvoOfGender=memberService.genderList();	//성별 : gender
		List<CodeVO> listvoOfGrade=memberService.gradeList();	//학년 : grade
		List<CodeVO> listvoOfPassword=memberService.passwordList();	//비밀번호 : password
		HashMap map=new HashMap();					
		map.put("hopeSubjectList", listVoOfHopesubject);
		map.put("genderList", listvoOfGender);
		map.put("gradeList", listvoOfGrade);
		map.put("sidoList", listvoOfSido);	
		map.put("passwordList", listvoOfPassword);
//		System.out.println(map);
		return map;
	}

	/**
	 * 학생찾기 첫페이지 보여주기에서 셀렉트박스에 뿌려줄 시도리스트 가져오기
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/getSidoList.do")
	@ResponseBody
	public List<CodeVO> getSidoList(HttpServletRequest request, HttpServletResponse response) throws Exception{
		List<CodeVO> listVO=memberService.sidoList();
		return listVO;
	}
	
	/**
	 * 학생찾기 첫페이지 보여주기에서 셀렉트박스에 뿌려줄 희망과목리스트 가져오기
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/gugunList.do")
	@ResponseBody
	public List<CodeVO> gugunList(HttpServletRequest request, HttpServletResponse response, String code_code) throws Exception{
		List<CodeVO> listvoOfGugun=memberService.gugunList(code_code);
		return listvoOfGugun;
	}
	
	/**
	 * 과외학생찾기페이지에서 tap-전체보기를 처리하는 method
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/tabStudentTotalView.do")
	public ModelAndView tabStudentTotalView(HttpServletRequest request, HttpServletResponse response, String pageNo) throws Exception{
		StudentListVO listVO=memberService.getStudentListBasic(pageNo);
		return new ModelAndView("search/students/tabpage/total_form","listVO",listVO);
	}

	/**
	  * 과외학생찾기페이지에서 tap-전체보기에서 특정페이지(1,2,3,4,,,,N)로 이동
	 * @param request
	 * @param response
	 * @param pageNo
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/tabStudentTotalViewPageN.do")
	@ResponseBody
	public StudentListVO tabStudentTotalViewPageN(HttpServletRequest request, HttpServletResponse response, String pageNo) throws Exception{
		System.out.println("controll : pageNo"+pageNo);
		StudentListVO listVO=memberService.getStudentListBasic(pageNo);
//		System.out.println("학생찾기-전체보기 탭"+ listVO.getList().toString());
		return listVO;
	}	
	/**				
	 * 과외학생찾기페이지에서 tap-지역별를 처리하는 method
	 * @param request
	 * @param response
	 * @param pageNo
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/tabStudentRegionView.do")
	public ModelAndView tabStudentRegionView(HttpServletRequest request, HttpServletResponse response, String pageNo) throws Exception{
		StudentListVO listVO=memberService.getStudentRegionList(pageNo);
		return new ModelAndView("search/students/tabpage/region_form","listVO",listVO);
	}	//redirect:


	/**
	 * 과외학생찾기페이지에서 tap-지역별에서 특정페이지(1,2,3,4,,,,N)로 이동
	 * @param request
	 * @param response
	 * @param pageNo
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/tabStudentRegionViewPageN.do")
	@ResponseBody
	public StudentListVO tabStudentRegionViewPageN(HttpServletRequest request, HttpServletResponse response, String pageNo) throws Exception{
		StudentListVO listVO=memberService.getStudentRegionList(pageNo);
		return listVO;
	}	
	
	/**
	 * 과외학생찾기페이지에서 tap-과목별를 처리하는 method
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/tabStudentSubjectView.do")
	public ModelAndView tabStudentSubjectView(HttpServletRequest request, HttpServletResponse response, String pageNo) throws Exception{
		StudentListVO listVO=memberService.getStudentSubjectList(pageNo);
		return new ModelAndView("search/students/tabpage/subject_form","listVO", listVO);
	}
	/**
	 * 과외학생찾기페이지에서 tap-과목별에서 특정페이지(1,2,3,4,,,,N)로 이동
	 * @param request
	 * @param response
	 * @param pageNo
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/tabStudentSubjectViewPageN.do")
	@ResponseBody
	public StudentListVO tabStudentSubjectViewPageN(HttpServletRequest request, HttpServletResponse response, String pageNo) throws Exception{
		StudentListVO listVO=memberService.getStudentSubjectList(pageNo);
		return listVO;
	}
	/**
	 * 과외학생찾기페이지에서 tap-학년별를 처리하는 method
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/tabStudentGradeView.do")
	public ModelAndView tabStudentGradeView(HttpServletRequest request, HttpServletResponse response, String pageNo) throws Exception{
		StudentListVO listVO=memberService.getStudentGradeList(pageNo);		
		return new ModelAndView("search/students/tabpage/grade_form","listVO", listVO);
	}

	@RequestMapping("/tabStudentGradeViewPageN.do")
	@ResponseBody
	public StudentListVO tabStudentGradeViewPageN(HttpServletRequest request, HttpServletResponse response, String pageNo) throws Exception{
		StudentListVO listVO=memberService.getStudentGradeList(pageNo);
		return listVO;
	}
	/**
	 * 학생찾기-학년별(grade_form)의 검색창에서 학년과  이름을 받아서
	 * 검색한 결과를 리스트타입으로 돌려준다. 
	 * @param request
	 * @param response
	 * @param name
	 * @param grade
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/getSearchStudentbyGrade.do")
	@ResponseBody
	public StudentListVO getSearchStudentbyGrade(HttpServletRequest request, HttpServletResponse response, String grade_name, String grade_grade) throws Exception{
		MemberSearchVO memberSearchVO=new MemberSearchVO();	
		if(grade_name!=""){		//입력받은 이름은 null 일 경우도 있으므로 
			memberSearchVO.setName(grade_name);
		}		
		memberSearchVO.setGrade(grade_grade);
		StudentListVO listVO=memberService.getSearchStudentbyGrade(memberSearchVO);
//		System.out.println("컨트롤 getSearchStudentbyGrade 결과 :"+listVO);
		return listVO;
	}	
	/**
	 * 학생찾기-과목별(subject_form)의 검색창에서 과외희망과목, 이름을 받아서
	 * 검색한 결과를 리스트타입으로 돌려준다. 
	 * @param request
	 * @param response
	 * @param subject_name
	 * @param subject_hopesubject
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/getSearchStudentbySubject.do")
	@ResponseBody
	public StudentListVO getSearchStudentbySubject(HttpServletRequest request, HttpServletResponse response, String subject_name, String subject_hopesubject) throws Exception{
		MemberSearchVO memberSearchVO=new MemberSearchVO();	
		//System.out.println("검색하면 이쪽으로 온다");
		if(subject_name!=""){		//입력받은 이름은 null 일 경우도 있으므로 
			memberSearchVO.setName(subject_name);
		}		
		
		memberSearchVO.setHopesubject(subject_hopesubject);
		request.setAttribute("hopesubject",subject_hopesubject );
		request.setAttribute("name", subject_name);
		StudentListVO listSubjectVO=memberService.getSearchStudentbySubject(memberSearchVO);
//		System.out.println("컨트롤 getSearchStudentbySubject 결과 :"+listVO);
		return listSubjectVO;
	}

	/**
	 * 학생찾기-지역별(region_form)의 검색창에서 과외희망과목, 이름을 받아서
	 * 검색한 결과를 리스트타입으로 돌려준다. 
	 * @param request
	 * @param response
	 * @param region_name
	 * @param region_gugun
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/getSearchStudentbyRegion.do")
	@ResponseBody
	public StudentListVO getSearchStudentbyRegion(HttpServletRequest request, HttpServletResponse response, String pageNo, String region_name, String region_gugun) throws Exception{
		MemberSearchVO memberSearchVO=new MemberSearchVO();
		System.out.println("콘트롤pageNo : "+ pageNo+"이름: "+ region_name+"구군 : "+region_gugun);
		if(region_name!=""){		//입력받은 이름은 null 일 경우도 있으므로 
			memberSearchVO.setName(region_name);
		}	
		System.out.println("콘트롤 pageNo :"+pageNo);
		if(pageNo!=""){		//입력받은 페이지 번호가 null 이 아닌 경우
			memberSearchVO.setPageNo(pageNo);
		}	
		memberSearchVO.setHoperegion(region_gugun);
		StudentListVO listVO=memberService.getSearchStudentbyRegion(memberSearchVO);
//		System.out.println("컨트롤 getSearchStudentbyRegion 결과 :"+listVO);
		return listVO;
	}
	
	/**
	 * 학생찾기-전체보기(total_form)의 검색창에서 과외희망지역, 이름, 학교학년, 성별, 희망과목을 받아서
	 * 검색한 결과를 리스트타입으로 돌려준다. 
	 * @param request
	 * @param response
	 * @param total_name
	 * @param total_gugun
	 * @param total_grade
	 * @param total_gender
	 * @param total_hopesubject
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/getSearchStudentbyTotal.do")
	@ResponseBody
	public StudentListVO getSearchStudentbyTotal(HttpServletRequest request, HttpServletResponse response,
			String total_name, String total_gugun, String total_grade, String total_gender, String total_hopesubject) throws Exception{
		System.out.println(total_gugun.length());
		MemberSearchVO memberSearchVO=new MemberSearchVO();	
		if(total_name!=""){		//입력받은 이름은 null 일 경우도 있으므로 
			memberSearchVO.setName(total_name);
		}
		if(total_gugun!=""){	
			memberSearchVO.setHoperegion(total_gugun);
		}
		if(total_gender !=""){
			memberSearchVO.setGender(total_gender);
		}
		if(total_grade !=""){	//입력받은 학교학년이 ""이면 null 로 둔다.
			memberSearchVO.setGrade(total_grade);
		}
		if(total_hopesubject !=""){
			memberSearchVO.setHopesubject(total_hopesubject);
		}
		System.out.println(memberSearchVO);
		StudentListVO listVO=memberService.getSearchStudentbyTotal(memberSearchVO);
		System.out.println(listVO);
		return listVO;
	}

	/**
	 * 선생님찾기-전체보기(total_form)의 검색창에서 과외희망지역, 이름, 출신학교, 성별, 희망과목을 받아서
	 * 검색한 결과를 리스트타입으로 돌려준다.
	 * @param request
	 * @param response
	 * @param total_name
	 * @param total_gugun
	 * @param total_university
	 * @param total_gender
	 * @param total_hopesubject
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/getSearchTeacherbyTotal.do")
	@ResponseBody
	public TeacherListVO getSearchTeacherbyTotal(HttpServletRequest request, HttpServletResponse response,
			MemberSearchVO memberSearchVO) throws Exception{
		System.out.println("getSearchTeacherbyTotal:>"+memberSearchVO);
		TeacherListVO listVO=memberService.getSearchTeacherbyTotal(memberSearchVO);
		return listVO;
	}
	/**
	 * 과외선생님찾기페이지에서 tap-전체보기를 처리하는 method
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/tabTeacherTotalView.do")
	public ModelAndView tabTeacherTotalView(HttpServletRequest request, HttpServletResponse response, String pageNo) throws Exception{
		TeacherListVO listVO=memberService.getTeacherListBasic(pageNo);
		return new ModelAndView("search/teacher/tabpage/total_form","listVO",listVO);
	}

	/**
	 * 과외선생님찾기페이지에서 tap-지역별를 처리하는 method
	 * @param request
	 * @param response
	 * @param pageNo
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/tabTeacherRegionView.do")
	public ModelAndView tabTeacherRegionView(HttpServletRequest request, HttpServletResponse response, MemberSearchVO memberSearchVO) throws Exception{
		TeacherListVO listVO=memberService.getTeacherRegionList(memberSearchVO);
		return new ModelAndView("search/teacher/tabpage/region_form","listVO",listVO);
	}	//redirect:
	
	/**
	 * 과외선생님찾기페이지에서 tap-과목별를 처리하는 method
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/tabTeacherSubjectView.do")
	public ModelAndView tabTeacherSubjectView(HttpServletRequest request, HttpServletResponse response, MemberSearchVO memberSearchVO) throws Exception{
		TeacherListVO listVO=memberService.getTeacherSubjectList(memberSearchVO);
//		System.out.println("controll : "+ pageNo);
		return new ModelAndView("search/teacher/tabpage/subject_form","listVO", listVO);
	}
	
	
	@RequestMapping("/tabTeacherUniversityView.do")
	public ModelAndView tabTeacherUniversityView(HttpServletRequest request, HttpServletResponse response, MemberSearchVO memberSearchVO) throws Exception{
		TeacherListVO listVO=memberService.getTeacherUniversityList(memberSearchVO);
//		System.out.println("controll : "+ pageNo);
		return new ModelAndView("search/teacher/tabpage/university_form","listVO", listVO);
	}

	
	/**
	 * 선생님찾기-지역별(region_form)의 검색창에서 과외희망지역, 이름을 받아서
	 * 검색한 결과를 리스트타입으로 돌려준다. 
	 * @param request
	 * @param response
	 * @param region_name
	 * @param region_gugun
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/getSearchTeacherbyRegion.do")
	@ResponseBody
	public TeacherListVO getSearchTeacherbyRegion(HttpServletRequest request, HttpServletResponse response, MemberSearchVO memberSearchVO) throws Exception{
		System.out.println("member searchVO:"+memberSearchVO);
		TeacherListVO listVO=memberService.getSearchTeacherbyRegion(memberSearchVO);
//		System.out.println("컨트롤 getSearchTeacherbyRegion 결과 :"+listVO);
		return listVO;
	}
	
	/**
	 * 선생님찾기-희망과목별(subject_form)의 검색창에서 과외희망과목, 이름을 받아서
	 * 검색한 결과를 리스트타입으로 돌려준다. 
	 * @param request
	 * @param response
	 * @param subject_name
	 * @param subject_hopesubject
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/tabTeacherSubjectViewResult.do")
	@ResponseBody
	public TeacherListVO tabTeacherSubjectViewResult(HttpServletRequest request, HttpServletResponse response, MemberSearchVO memberSearchVO) throws Exception{
		TeacherListVO listVO=memberService.getTeacherSubjectList(memberSearchVO);
//		System.out.println("controll : "+ pageNo);
		return  listVO;
	}

	/**
	 * 선생님찾기-출신대학별(university_form)의 검색창에서 출신대학명, 이름을 받아서
	 * 검색한 결과를 리스트타입으로 돌려준다. 
	 * @param request
	 * @param response
	 * @param subject_name
	 * @param subject_hopesubject
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/getSearchTeacherbyUniversity.do")
	@ResponseBody
	public TeacherListVO getSearchTeacherbyUniversity(HttpServletRequest request, HttpServletResponse response, String university_name, String university_university) throws Exception{
		MemberSearchVO memberSearchVO=new MemberSearchVO();	
		if(university_name!=""){		//입력받은 이름은 null 일 경우도 있으므로 
			memberSearchVO.setName(university_name);
		}		
		memberSearchVO.setUniversity(university_university);
		request.setAttribute("university", memberSearchVO.getUniversity());
		TeacherListVO listVO=memberService.getSearchTeacherbyUniversity(memberSearchVO);
		System.out.println("컨트롤 getSearchTeacherbyUniversity 결과 :"+listVO);
		return listVO;
	}
	/**
	 * 과외선생님찾기페이지에서 tap-학년별를 처리하는 method
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception		
	 *//*
	@RequestMapping("/tabTeacherUniversityView.do")
	public ModelAndView tabTeacherUniversityView(HttpServletRequest request, HttpServletResponse response, String pageNo) throws Exception{
		TeacherListVO listVO=memberService.getTeacherGradeList(pageNo);		
		return new ModelAndView("search/teacher/tabpage/university_form","listVO", listVO);
	}*/
	
	/**
	 * 선생님 찾기-출신대학명 autocomplete 기능 구현 메서드
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/getUniversityHint.do")
	@ResponseBody	
	public List<String> getUniversityHint(HttpServletRequest request, HttpServletResponse response) throws Exception{
		String term=request.getParameter("term");
		List<String> listUniversityName=memberService.getUniversityName(term);
		return listUniversityName;
	}
	
	/**
	 * 학생 Id 를 파라미터로 받아서 학생 정보를 DB에서 가져와서 view로 보낸다. 
	 * @param request
	 * @param response
	 * @param studentId
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/getStudentInfobyId.do")
	@ResponseBody	
	public StudentVO getStudentInfobyId(HttpServletRequest request, HttpServletResponse response, String studentId) throws Exception{
		StudentVO svo=new StudentVO();
		svo.setId(studentId);
		svo=memberService.getStudentInfobyId(svo);
//		System.out.println("콘트롤 후"+svo);
		return  svo;
	}
	
	@RequestMapping("/getTeacherInfobyId.do")
	@ResponseBody	
	public TeacherVO getTeacherInfobyId(HttpServletRequest request, HttpServletResponse response, String teacherId) throws Exception{
		System.out.println("getTeacherInfobyId"+teacherId);
		TeacherVO tvo=new TeacherVO();
		tvo.setId(teacherId);
		tvo=memberService.getTeacherInfobyId(tvo);
		System.out.println("콘트롤 후"+tvo);
		return tvo;
	}	
/////////////////////////////////////정운선 끝///////////////////////////////////////	
	/**
	 * 이름과 이메일로 아이디를 찾아온다.
	 * @param mvo
	 * @return
	 * @throws SQLException
	 */
	@RequestMapping("/findIdByNameEmail.do")
	public ModelAndView findIdByNameEmail(MemberVO mvo) throws SQLException{
		System.out.println("아이디 찾기:"+mvo);
		String id=memberService.findIdByNameEmail(mvo);
		System.out.println("controller id:"+id);
		return new ModelAndView("support/inquiry/findIdResultPage.inquiry","id",id);
	}
	/**
	 * 아이디와 이메일로 패스워드의 질문을 찾아온다.
	 * @param mvo
	 * @return
	 * @throws SQLException
	 * @throws IOException 
	 */
	@RequestMapping("/findQPassByIdEmail.do")
	public ModelAndView findQPassByIdEmail(HttpServletResponse response,MemberVO mvo) throws SQLException, IOException{
		System.out.println("패스워드 질문 찾기:"+mvo);
		MemberVO mvo1=memberService.findQPassByIdEmail(mvo);
		if(mvo1==null){
			response.sendRedirect("findQPassByIdEmai_fail.jsp");
		}
		return new ModelAndView("support/inquiry/findQPassResultPage.inquiry","mvo",mvo1);
	}
	@RequestMapping("/findPasswordByQnAPass.do")
	@ResponseBody
	public String findPasswordByQnAPass(MemberVO mvo) throws SQLException{
		System.out.println("패스워드 찾기 입력값"+mvo);
		String password=memberService.findPasswordByQnAPass(mvo);
		String result="등록된 패스워드는 "+password+" 입니다.";
		if(password==null){
			result="입력값이 일치하지 않습니다.";
		}
		return result;
	}
}
